using UnityEngine;
using System.Collections;

public class cameraFollow : MonoBehaviour {

	// Use this for initialization
	public GameObject bola;
	public GameObject[] Tanques;
	Vector3 Tanque;
	Vector3 mediaTanques;
	public Vector3 mediaTotal;
	// Deslocamento máximo para fov 60 = 0, 35, -40
	public Vector3 deslocamento = new Vector3(0,20,-30);
	Vector3 CamPosition;
	public float xMax; // Max xMax = 46
	public float xMin; // Min xMin = -48
	public float zMax; // Max zMax = 46
	public float zMin; // Min zMin = -24
	public float MaiorX; 
	public float MenorX; 
	public float MaiorZ; 
	public float MenorZ; 
	public float CamDist;
	public float minCamDist = 20f;
	public float maxCamDist = 84f;
	public float MaxDist;
	public float CamFOV;
	public float RotX;
	public float Corr = 10f;
	
	void Start () {
		Tanque = Vector3.zero;
	}
	
	// Update is called once per frame
	void Update () {
		PosMedia();
		calcPos();
	  	//transform.position = mediaTotal + deslocamento;
		transform.position = CamPosition;
		
	}
	
	void PosMedia(){
		
		MaiorX = bola.transform.position.x;
		MenorX = bola.transform.position.x;
		MaiorZ = bola.transform.position.z;
		MenorZ = bola.transform.position.z;
		
		for (int i=0; i < Tanques.Length; i++ ){
			Tanque += Tanques[i].transform.position;
			
			
//			if (Tanques[i].transform.position.x > MaiorX){
//				MaiorX = Tanques[i].transform.position.x;
//			}
//			if (Tanques[i].transform.position.x < MenorX){
//				MenorX = Tanques[i].transform.position.x;
//			}
//			if (Tanques[i].transform.position.z > MaiorZ){
//				MaiorZ = Tanques[i].transform.position.z;
//			}
//			if (Tanques[i].transform.position.z < MenorZ){
//				MenorZ = Tanques[i].transform.position.z;
//			}
			
		}
//		mediaTanques = Tanque / Tanques.Length;
//		Tanque = Vector3.zero;
//		mediaTotal = (mediaTanques + bola.transform.position)/2;
//		if (mediaTotal.z > 0){mediaTotal.z = 0;}
//		if (mediaTotal.z < -9){mediaTotal.z = -9;}
//		if (mediaTotal.x > 21){mediaTotal.x = 21;}
//		if (mediaTotal.x < -21){mediaTotal.x = -21;}
	}
	// Criar metodo para encontrar o maior e o menor valor de x e z
	

	
	void PosX(){
		// Calcula as posições > e < no eixo X
		xMax = bola.transform.position.x;
		xMin = bola.transform.position.x;
		
		foreach (GameObject t in Tanques){
			if (t.transform.position.x > xMax){
				xMax = t.transform.position.x;
			}
			if (t.transform.position.x < xMin){
				xMin = t.transform.position.x;
			}
		}
}
	
	void PosZ(){
		// Calcula as posições > e < no eixo Z
		zMax = bola.transform.position.z;
		zMin = bola.transform.position.z;
		
		foreach (GameObject t in Tanques){
			if (t.transform.position.z > zMax){
				zMax = t.transform.position.z;
			}
			if (t.transform.position.z < zMin){
				zMin = t.transform.position.z;
			}
		}
	}
	
	void calcPos(){
		// Calcula a posição da camera em relação aos jogadores mais distantes entre si
		// Usa o FieldOfView da camera para calcular
		// Tan(FOV/2)= ((Max - Min)/2)/CamDist
		// CamDist²=y²+z² ou
		// sin(CamRot.x)= y/CamDist
		// Cos(CamRot.x)= z/CamDist
		
		PosX();
		PosZ();
		
		// Calcula o MaxDist
		if (2*(xMax-xMin) > 2*(zMax-zMin)){
			MaxDist = 2*(xMax - xMin);
		}else{
			MaxDist = 2*(zMax-zMin);
		}
		CamFOV = camera.fov;
		RotX = this.transform.rotation.x;
		// Calcula a distância da camera ao centro
		
		CamDist = ((MaxDist)/2)/Mathf.Tan(camera.fov*Mathf.Deg2Rad/2);
		
		if (CamDist < minCamDist){
			CamDist = minCamDist;
		}
		if (CamDist > maxCamDist){
			CamDist = maxCamDist;
		}
		// Calcula os deslocamentos z e y
		deslocamento.y = CamDist*Mathf.Cos(42*Mathf.Deg2Rad);
		deslocamento.z = -1*CamDist*Mathf.Sin(42*Mathf.Deg2Rad);
		CamPosition = new Vector3 ((xMax+xMin)/2, deslocamento.y+100, (zMax+zMin)/2+deslocamento.z);
		
		
	}
}